﻿//using System;
//using System.Collections.Generic;

//namespace Core.Frame
//{
//    public partial class FrameSystem : Component, IAwake
//    {
//        public event Action onUpdate;
//        public event Action onAfterUpdate;
//        public event Action onFixedUpdate;
//        public event Action onLateUpdate;
//        public event Action onAfterLateUpdate;

//        public event Action<float> onUpdate30;
//        public event Action<float> onUpdate10;
//        public event Action<float> onUpdate5;
//        public event Action<float> onUpdate1;

//        public event Action<float> onAfterUpdate30;
//        public event Action<float> onAfterUpdate10;
//        public event Action<float> onAfterUpdate5;
//        public event Action<float> onAfterUpdate1;

//        private Dictionary<int, FrameRate> m_dict = new Dictionary<int, FrameRate>();

//        public void Awake()
//        {

//            m_dict.Add((int)EFrame.F_30, new FrameRate(EFrame.F_30, this));
//            m_dict.Add((int)EFrame.F_10, new FrameRate(EFrame.F_10, this));
//            m_dict.Add((int)EFrame.F_5, new FrameRate(EFrame.F_5, this));
//            m_dict.Add((int)EFrame.F_1, new FrameRate(EFrame.F_1, this));
//        }

//        public override void Dispose()
//        {
//            if (IsDisposed) return;
//            base.Dispose();

//            onUpdate = null;
//            onAfterUpdate = null;
//            onFixedUpdate = null;
//            onLateUpdate = null;
//            onAfterLateUpdate = null;

//            m_dict.Clear();
//        }

//        public void Update()
//        {
//            onUpdate?.Invoke();

//            foreach (var item in m_dict)
//            {
//                item.Value.Update();
//            }

//            onAfterUpdate?.Invoke();

//            foreach (var item in m_dict)
//            {
//                item.Value.AfterUpdate();
//            }
//        }

//        public void FixedUpdate()
//        {
//            onFixedUpdate?.Invoke();
//        }

//        public void LateUpdate()
//        {
//            onLateUpdate?.Invoke();
//            onAfterLateUpdate?.Invoke();
//        }
//    }
//}

